#ifndef __LINKLIST_H_
#define __LINKLIST_H_

#define ELEMENT_TYPE int
#include <iostream>
using namespace std;

struct LinkNode
{
public:
    LinkNode(ELEMENT_TYPE data, LinkNode *next) : m_data(data), m_next(next) {} // 构造函数，初始化数据域和指针域

public:
    ELEMENT_TYPE m_data; // 数据域
    LinkNode *m_next;    // 指针域
};

class LinkList
{

public:
    LinkList();  // 构造函数
    ~LinkList(); // 析构函数

public:
    int linkListHeadInsert(ELEMENT_TYPE data); /*链表头插 */
    int linkListTailInsert(ELEMENT_TYPE data); /*链表尾插 */

    int linkListHeadDelete();              // 链表头删
    int linkListTailDelete();              // 链表尾删
    int linkListAppointPosDelete(int pos); // 链表任意位置删

    int linkListAppointPosInsert(int pos, ELEMENT_TYPE data); // 链表任意位置插入
    void travelListElement();                                 // 遍历函数
    int getSize() const { return m_size; }                    // 获取链表大小
private:
    LinkNode *m_head; // 头指针
    LinkNode *m_tail; // 尾指针
    int m_size;       // 链表的节点数
};

#endif //__LINKLIST_H_